<?php
/**
 * Layout Class
 *
 * @package		Application
 * @subpackage	Libraries
 * @category	Layout
 * @author		PC4 Dev Team
 */
class Layout {

	/**
	 * CodeIgniter Object
	 * @var Object
	 */
	var $CI;
	
	/**
	 * @var string $app_name Nome da aplicação, deve ser usado em caixa baixa e sem espaços. Importante para evitar colisões de aplicações com outras aplicações no mesmo domínio.
	 * @access public
	 */
	public $app_name;

	/**
	 * @var string $title Título padrão da aplicação.
	 * @access public
	 */
	public $title;
	
	/**
	 * @var string $layout Nome do layout padrão a ser utilizado pela aplicação.
	 * @access public
	 */
	public $view;
	
	/**
	 * @var array $css Define os CSSs que devem ser carregados automaticamente em todos os layouts.
	 * @access public
	 */
	public $css;
	
	/**
	 * @var array $js Define os JSs que devem ser carregados automaticamene em todos os layouts.
	 * @access public
	 */
	public $js;
		
	/**
	 * Construct
	 * @return NULL
	 */
	function __construct(){
		
		log_message('debug', "Layout Class Initialized");

		// Set the super object to a local variable for use throughout the class
		$this->CI =& get_instance();
	}

	/**
	 * Adiciona JavaScripts ao layout.
	 * @param mixed $js String ou Array com referências de JavaScripts.
	 * @access public
	 * @return void
	 */
	public function addJS($js){
		$this->js = array_merge((array)$this->js, (array)$js);
	}
	
	/**
	 * Adiciona CSSs ao layout.
	 * @param mixed $css String ou Array com referências de CSSs.
	 * @access public
	 * @return void
	 */
	public function addCSS($css, $conditional = NULL){
		if($conditional != NULL){
			$this->css[$conditional] = array_merge((array)$this->css[$conditional], (array)$css);
		}
		else{
			$this->css['normal'] = array_merge((array)$this->css['normal'], (array)$css);
		}
	}
	
	/**
	 * Adiciona Meta Tags ao layout.
	 * @param mixed $meta Array de pares (nome/conteúdo) de cada Metatag.
	 * @example addMetaTag(array(array('description' => 'Descrição do site.', 'keywords' => 'Site, Sistema, PHP. Code Igniter')));
	 * @example addMetaTag(array('description' => 'Descrição do site.'));
	 * @access public
	 * @return void
	 */
	public function addMetaTag($meta){
		$this->metatag = array_merge((array)$this->metatag, (array)$meta);
	}
	
	/**
	 * Adiciona dados (variáveis) a serem enviados para o layout.
	 * @param string $chave Nome da variável a ser criada.
	 * @param mixed $valor
	 * @access public
	 * @return void
	 */
	public function setDado($chave, $valor) {
		$this->layout_data[$chave] = $valor;
	}
	
	/**
	 * Recupera todos os dados do layout.
	 * @return array Array com todos os dados do layout.
	 * @access public
	 * @return array Todos os dados do layout.
	 */
	public function getDados() {
		return $this->layout_data;
	}
	/**
	 * Recupera um dado do layout.
	 * @param string $chave Nome da variável a ser recuperada.
	 * @access public
	 * @return mixed Valor da Variável.
	 */
	public function getDado($chave) {
		return $this->layout_data[$chave];
	}
	
	/**
	 * Altera o título da janela mantendo o nome da aplicação.
	 * @param string $titulo 
	 * @param bool $append Se o título deve ser acrescentado ou substituir o valor atual. Padrão: false.
	 */
	public function setTitle($title, $append = false)  {
		$pos = strrpos($this->title, '|');
		if ($pos !== false && !$append) {
			$this->title = substr($this->title, 0, $pos - 1);
		}
		
		$this->title .= ' | ' . $title;
	}

}